﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using LarDosIdosos.Business;
using LarDosIdosos.Business.Model;
using LarDosIdosos.Properties;

namespace LarDosIdosos.DataSources
{
    public class DataSourceFuncionario
    {
		
		public List<Business.Model.Funcionario> BuscaFuncionario(int startrowindex, int maximumrows, string sortexpression, object sql)
        {
            DBFuncionarios dbFuncionario = new DBFuncionarios(Settings.Default.StringDeConexaoComBanco);
            return dbFuncionario.SelectFuncionarios(sql.ToString());
        }

        public int TotalDeFuncionario(object sql)
        {
            DBFuncionarios dbFuncionario = new DBFuncionarios(Settings.Default.StringDeConexaoComBanco);
            return dbFuncionario.Count(sql.ToString());
        }
		
        public Funcionario BuscaFuncionarioPeloCPF(string cpf)
        {
            DBFuncionarios dbFuncionarios = new DBFuncionarios(Settings.Default.StringDeConexaoComBanco);
            return dbFuncionarios.SelectFuncionarioPeloCPF(cpf);
        }

        public bool SalvaNovaSenha(Funcionario funcionario)
        {
            DBFuncionarios dbFuncionarios = new DBFuncionarios(Settings.Default.StringDeConexaoComBanco);
            string update =
                string.Format("update funcionario set Senha_Funcionario = \"{0}\" where Codigo_Funcionario = {1}",
                              funcionario.Senha_Funcionario, funcionario.Codigo_Funcionario);
            return dbFuncionarios.UpdateFuncionario(update);
        }

        public Funcionario BuscaFuncionario(int codigo)
        {
            DBFuncionarios dbFuncionarios = new DBFuncionarios(Settings.Default.StringDeConexaoComBanco);
            string sql = string.Format("select * from funcionario where Codigo_Funcionario = '" + codigo + "'");
            return dbFuncionarios.SelectFuncionario(sql);
        }

        public int Insert(Funcionario funcionario)
        {
            DBFuncionarios dbFuncionarios = new DBFuncionarios(Settings.Default.StringDeConexaoComBanco);
            string sql = string.Format("insert into funcionario (Estado_Civil_Codigo_Estado_Civil,Cargo_Codigo_Cargo,Sexo_Codigo_Sexo,Nome_Funcionario,CPF_Funcionario,RG_Funcionario,Senha_Funcionario,Email_Funcionario,Data_de_Nascimento_Funcionario,Grau_de_Instrucao_Funcionario,Nome_da_Mae_Funcionario,Registro_Profissional_Funcionario,Tipo_Registro_Profissional_Funcionario,Nome_do_Pai_Funcionario) VALUES ({0},{1},{2},'{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}')", funcionario.Estado_Civil.Codigo_Estado_Civil, funcionario.Cargo_Funcionario.CodigoCargo, funcionario.Sexo_Funcionario.Codigo_Sexo, funcionario.Nome_Funcionario, funcionario.CPF_Funcionario, funcionario.RG_Funcionario, funcionario.Senha_Funcionario, funcionario.Email_Funcionario, funcionario.Data_de_Nascimento_Funcionario.ToString("yyyy-MM-dd"), funcionario.Grau_de_Instrucao_Funcionario, funcionario.Nome_da_Mae_Funcionario, funcionario.Registro_Profissional_Funcionario, funcionario.Tipo_Registro_Profissional_Funcionario, funcionario.Nome_do_Pai_Funcionario);
            return dbFuncionarios.Insert(sql);
        }

        public int Update(Funcionario funcionario)
        {
            DBFuncionarios dbFuncionarios = new DBFuncionarios(Settings.Default.StringDeConexaoComBanco);
            string sql = string.Format("update funcionario set Estado_Civil_Codigo_Estado_Civil = {0}, Cargo_Codigo_Cargo = {1}, Sexo_Codigo_Sexo = {2}, Nome_Funcionario = '{3}', CPF_Funcionario = '{4}', RG_Funcionario = '{5}', Senha_Funcionario = '{6}', Email_Funcionario = '{7}', Data_de_Nascimento_Funcionario = '{8}', Grau_de_Instrucao_Funcionario = '{9}', Nome_da_Mae_Funcionario = '{10}', Registro_Profissional_Funcionario = '{11}', Tipo_Registro_Profissional_Funcionario = '{12}', Nome_do_Pai_Funcionario = '{13}' where codigo_funcionario = {14}", funcionario.Estado_Civil.Codigo_Estado_Civil, funcionario.Cargo_Funcionario.CodigoCargo, funcionario.Sexo_Funcionario.Codigo_Sexo, funcionario.Nome_Funcionario, funcionario.CPF_Funcionario, funcionario.RG_Funcionario, funcionario.Senha_Funcionario, funcionario.Email_Funcionario, funcionario.Data_de_Nascimento_Funcionario.ToString("yyyy-MM-dd"), funcionario.Grau_de_Instrucao_Funcionario, funcionario.Nome_da_Mae_Funcionario, funcionario.Registro_Profissional_Funcionario, funcionario.Tipo_Registro_Profissional_Funcionario, funcionario.Nome_do_Pai_Funcionario, funcionario.Codigo_Funcionario);
            return dbFuncionarios.Update(sql);
        }

        public int Delete(int codigofuncionario)
        {
            DBTelefone dbTelefone = new DBTelefone(Settings.Default.StringDeConexaoComBanco);
            dbTelefone.Delete(string.Format("delete from telefone where funcionario_codigo_funcionario = {0}",
                                            codigofuncionario));
            DBFuncionarios dbFuncionarios = new DBFuncionarios(Settings.Default.StringDeConexaoComBanco);
            string sql = string.Format("delete from funcionario where codigo_funcionario = {0}", codigofuncionario);
            return dbFuncionarios.Delete(sql);
        }

        public void InsertTelefone(Funcionario funcionario)
        {
            DBTelefone dbTelefone = new DBTelefone(Settings.Default.StringDeConexaoComBanco);
            DBFuncionarios dbFuncionarios = new DBFuncionarios(Settings.Default.StringDeConexaoComBanco);
            List<Telefone> listaDosTelefonesQueJaExistemNaTabela = dbFuncionarios.BuscaTelefones(funcionario.Codigo_Funcionario);
            foreach (Telefone telefone in listaDosTelefonesQueJaExistemNaTabela)
            {
                IEnumerable<Telefone> enumerable = from tel in funcionario.Telefones_Funcionario
                                                   where
                                                       (tel.Codigo_Telefone == telefone.Codigo_Telefone &&
                                                        tel.Numero_Telefone == telefone.Numero_Telefone)
                                                   select tel;
                if(enumerable.Count() == 0)
                {
                    dbTelefone.Delete(string.Format("delete from telefone where codigo_telefone = {0}", telefone.Codigo_Telefone));
                }
            }
            IEnumerable<Telefone> telefones = from tel in funcionario.Telefones_Funcionario
                                              where tel.Codigo_Telefone == 0
                                              select tel;
            foreach (var telefone in telefones)
            {
                string sql = string.Format("insert into telefone (Funcionario_Codigo_Funcionario,Numero_Telefone) values ({0},'{1}')", funcionario.Codigo_Funcionario, RemoveMascaraTelefone(telefone.Numero_Telefone));
                dbTelefone.Insert(sql);
            }
        }

        private string RemoveMascaraTelefone(string telefone)
        {
            return telefone.Replace("(", "").Replace(")", "").Replace("-", "");
        }
    }
}